package com.soul.autoconfig;

import com.soul.autoconfig.properties.*;
import com.soul.autoconfig.template.*;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;

/**
 *  根据springboot自动装配原理，自定义配置自动装配
 */
@EnableConfigurationProperties({
        SmsProperties.class,
        OssProperties.class,
        FaceProperties.class,
        HuanXinProperties.class,
        GreenProperties.class
})
public class SoulAutoConfiguration {

    /**
     *  发短信创建对象交给spring的IOC容器管理
     * @param properties 属性
     * @return SmsTemplate
     */
    @Bean
    public SmsTemplate smsTemplate(SmsProperties properties) {
        return new SmsTemplate(properties);
    }

    /**
     *  Oss分布式服务创建对象交给spring的IOC容器管理
     * @param ossProperties 属性
     * @return OssTemplate
     */
    @Bean
    public OssTemplate ossTemplate(OssProperties ossProperties) {
        return new OssTemplate(ossProperties);
    }

    /**
     *  百度AI人脸识别创建对象交给spring的IOC容器管理
     * @param faceProperties 属性
     * @return FaceTemplate
     */
    @Bean
    public FaceTemplate faceTemplate(FaceProperties faceProperties) {
        return new FaceTemplate(faceProperties);
    }

    /**
     *  即时通讯(聊天)创建对象交给spring的IOC容器管理
     * @param huanXinProperties 属性
     * @return HuanXinTemplate
     */
    @Bean
    public HuanXinTemplate huaxintemplate(HuanXinProperties huanXinProperties) {
        return new HuanXinTemplate(huanXinProperties);
    }

    /**
     *  内容文本和视频审核配置创建对象交给spring的IOC容器管理
     *  当有配置信息tanhua.green, 且有个配置项enable的值为true时，才来创建AliyunGreenTemplate 对象
     * @param properties
     * @return
     */
    @Bean
    @ConditionalOnProperty(prefix = "soull.green",value = "enable", havingValue = "true")
    public AliyunGreenTemplate aliyunGreenTemplate(GreenProperties properties) {
        return new AliyunGreenTemplate(properties);
    }
}